package com.zzjson.io.nio.buffer;

import java.nio.ByteBuffer;

/**
 * <p>****************************************************************************</p>
 * <p><b>Copyright © 2010-2019 shuncom team All Rights Reserved<b></p>
 * <ul style="margin:15px;">
 * <li>Description : cn.zzjson.io.nio.buffer
 * 只读缓冲区非常简单，可以读取它们，但是不能向它们写入数据。
 * 可以通过调用缓冲区的 asReadOnlyBuffer()方法，将任何常规缓 冲区转 换为只读缓冲区，这个方法返回一个与原缓冲区完全相同的缓冲区，并与原缓冲区共享数据，
 * 只不过它是只读的。如果原 缓冲区的内容发生了变化，只读缓冲区的内容也随之发生变化:
 * 如果尝试修改只读缓冲区的内容，则会报 ReadOnlyBufferException 异常。
 * 只读缓冲区对于保护数据很有用。在将缓冲区传递给某 个 对象的方法时，
 * 无法知道这个方法是否会修改缓冲区中的数据。创建一个只读的缓冲区可以保证该缓冲区不会被修改。
 * 只可以 把常规缓冲区转换为只读缓冲区，而不能将只读的缓冲区转换为可写的缓冲区。
 * </li>
 * <li>Version     : 1.0.0</li>
 * <li>Creation    : 2019年03月26日</li>
 * <li>@author     : zzy0_0</li>
 * </ul>
 * <p>****************************************************************************</p>
 */
public class ReadOnlyBuffer {
	public static void main(String[] args) {
		ByteBuffer buffer = ByteBuffer.allocate(10);

		for (int i = 0; i < buffer.capacity(); i++) {
			buffer.put((byte) i);
		}
		ByteBuffer readOnlyBuffer = buffer.asReadOnlyBuffer();

		for (int i = 0; i < 10; i++) {
			buffer.put((byte) i);
		}
		// readOnlyBuffer.flip();
		readOnlyBuffer.position(0);
		readOnlyBuffer.limit(buffer.capacity());
		while (readOnlyBuffer.hasRemaining()) {
			System.out.println(readOnlyBuffer.get());
		}
	}
}
